/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.colswedev.app.labhudson.control;

import Control.Constantes;
import Control.Controlador;
import org.colswedev.app.labhudson.entity.Customer;

/**
 *
 * @author Leonardo Bohórquez
 */
public class TransactionControl {

    private CustomerControl cc;
    private Customer c;
    private static TransactionControl transactionControl = null;

    private TransactionControl() {
	cc = CustomerControl.getInstance();
    }

    public static synchronized TransactionControl getInstance() {
	if (transactionControl == null) {
	    transactionControl = new TransactionControl();
	}
	return transactionControl;
    }

    public void setCustomer(Customer customer) {
	c = customer;
    }

    public Customer getCustomer() {
	return c;
    }

    public boolean withdraw(Double amount) throws Exception {
	boolean result = true;
	if (amount >= 10000. && amount <= 400000. && c.getBalance() >= amount) {
	    if ((Math.floor(Controlador.getInstance().ejecutar(Constantes.DIVISION, amount, 10000.)) * amount) - amount == 0.) {
		c.setBalance(c.getBalance() - amount);
		cc.update(c);
	    } else {
		result = false;
		throw new Exception("Solo se aceptan cantidades que sean multiplos de $10.000");
	    }
	} else if (amount >= 400000.) {
	    result = false;
	    throw new Exception("La máxima cantidad que se puede retirar en una transacción es $400.000");
	} else if (amount <= 10000.) {
	    result = false;
	    throw new Exception("La mínima cantidad que puede ser retirada es de $10.000");
	} else if (c.getBalance() < amount) {
	    result = false;
	    throw new Exception("No hay fondos suficientes para realizar esta transacción");
	}
	return result;
    }

    public boolean consign(Double amount) throws Exception {
	boolean result = true;
	if (amount >= 10000. && amount <= 1000000.) {
	    if ((Math.floor(Controlador.getInstance().ejecutar(Constantes.DIVISION, amount, 10000.)) * amount) - amount == 0.) {
		c.setBalance(c.getBalance() + amount);
		cc.update(c);
	    } else {
		result = false;
		throw new Exception("Solo se aceptan cantidades que sean multiplos de $10.000");
	    }
	} else if (amount >= 1000000.) {
	    result = false;
	    throw new Exception("La máxima cantidad que se puede consignar en una transacción es $1'000.000");
	} else if (amount <= 10000.) {
	    result = false;
	    throw new Exception("La mínima cantidad que puede ser consignada es de $10.000");
	}
	return result;
    }
}
